package com.wangc.algorithm.sort;

import com.sun.org.apache.regexp.internal.RE;

import java.util.UUID;

/**
 * @author wangC
 * @create 2020-05-28 下午11:43
 * @Description  选择排序
 **/
public class SelectionSort {

    public static void main(String[] args) {
            UUID uid = UUID.randomUUID();
            String password = uid.toString().substring(0, 8);
            System.out.println(password);

    }


    public static void selectionSort(int[] arr) {
        //
        if (arr == null || arr.length == 1) {
            return;
        }

        //  0 - n-1 总数这么多，里面每个比较换到，最小的到 0 位置
        //  1- n-1  每个比较，最小到1位置
        //  2- n-1
        // n-2 , n-1
        for (int i = 0 ; i< arr.length; i++) {   // i- n-1

            int minIndex = i; //每次循环最小的交换的位置
            for (int j = i+1; j < arr.length ; j++) { //在i- n-1 里面找最小数的下标
                minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            }
            swap(arr,i,minIndex);

        }
    }

    public static void testSelectSort1103(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 0; i < arr.length; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                minIndex = arr[i] < arr[j] ? i : j;
            }
            swap(arr, i,minIndex);
        }
    }

    public static void testSelectSort1031(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 0; i < arr.length; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                /*if (arr[i] < arr[j]) {
                    swap(arr,i,j);
                }*/
                minIndex = arr[minIndex] < arr[j] ? minIndex : j;
            }
            swap(arr,i,minIndex);
        }
    }


    public static void testSelectSort1031_1(int[] arr) {
        if (arr == null || arr.length == 1) {
            return;
        }
        for (int i = 0; i < arr.length; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {

            }
        }
    }

    public static void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    public static int[] generateRandomArray(int maxSize, int maxValue) {
        //Math.random()  [0,1)
        //Math.random() * N   [0,N)
        //（int）(Math.random()) * N  [0,N-1]
        int[] arr = new int[(int)((maxSize+1)*Math.random())] ;

        for (int i = 0; i < arr.length; i++) {
            //[-?,+?]  随意
            arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) ((maxValue + 1) * Math.random());
        }


        return arr;

    }


    void selectSort(int[] arr) {

        if (arr == null || arr.length < 2) {
            return;
        }

        for (int i = 0 ; i<arr.length; i++) {

            int minIndex = i;

            for (int j=i+1 ; j<arr.length; j++){
                minIndex = arr[j] < arr[i] ? j : i;
            }
            swap(arr, i, minIndex);

        }

    }


    void sele(int[] arr) {

        for (int i = 0; i < arr.length; i++) {

            int minIndex = i;
            for (int j=i+1 ; j < arr.length;j++) {
                minIndex = arr[minIndex] < arr[j] ? minIndex : j;
            }
            swap(arr,minIndex,i);

        }

    }


    void asd(int[] arr) {
        for (int i= 0 ; i < arr.length; i++) {

            int minIndex = i;

            for (int j=i+1;j<arr.length;j++) {
                minIndex = arr[minIndex] < arr[j] ? minIndex : j;
            }
            swap(arr,i,minIndex);

        }
    }

    void selectSortTest1(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int minIndex = i;
            for (int j = 1; j < arr.length; j++) {
                minIndex = arr[minIndex] < arr[j] ? minIndex : j ;
            }
            swap(arr, minIndex, i);
        }
    }

    void selectSortTest2(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int minIndex = i;
            for (int j = 1; j < arr.length; j++) {
                minIndex = arr[minIndex] < arr[j] ? minIndex : j;
            }
            swap(arr,minIndex,i);
        }
    }


    void selectSortTest22(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int minIndex = i;
            for (int j = 1; j < arr.length; j++) {
                minIndex = arr[minIndex] < arr[j] ? minIndex : j;
            }
            swap(arr, minIndex, i);
        }
    }

    void selectSortTest33(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int minIndex = i;
            for (int j = 1; j < arr.length; j++) {
                minIndex = arr[minIndex] < arr[j] ? minIndex : j;
            }
            swap(arr,minIndex,i);
        }
    }

    void selectSortTest44(int[] arr) {
        for (int i = 0; i < arr.length ; i++) {
            int minIndex = i;
            for (int j = 1; j < arr.length ; j++) {
                minIndex = arr[minIndex] < arr[j] ? minIndex : j;
            }
            swap(arr, minIndex, i);
        }
    }

}
